home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / diskmags / 0022-3.564 / dmg-0040 / m26470.txt < prev    next >
Text File  |  1997-04-16  |  21KB  |  896 lines

  1. Info-Atari16 Digest   Thursday, September 14, 1989   Volume 89 : Issue 470
  2.  
  3. This weeks Editor: Bill Westfield
  4.  
  5. Today's Topics:
  6.  
  7.                             Re: Hard Drive
  8.                            TOS 1.4 on disk
  9.                         Modems and interfaces
  10.              Re: ROM disassembly for TOS -- A suggestion.
  11.                        put pixel routine wanted
  12.  
  13. ----------------------------------------------------------------------
  14.  
  15. Date: 12 Sep 89 12:22:27 GMT
  16. From: philmtl!philabs!ttidca!woodside@uunet.uu.net  (George Woodside)
  17. Subject: Re: Hard Drive
  18. To: info-atari16@score.stanford.edu
  19.  
  20. In article <89091023103918@masnet.uucp> calvin.bruner@canremote.uucp (CALVIN
  21.  BRUNER) writes:
  22. >I have a peculiar question....does anyone know if you can label a hard
  23. >drive segment as Drive "B", or is that reserved for floppys?  I have a
  24. >cartridge which only wants to access drives A or B, and wondered if just
  25. >reformatting (ugh!) my hard drive and labelling one segment as B would
  26. >do it?
  27. >Thanks
  28. >---
  29. > * Via ProDoor 3.01R
  30.  
  31.  
  32. It will fail.
  33.  
  34. Drives A, a, B, and b are floppies. Functions to those drives use
  35. the floppy disk I/O vectors. Drive c is the cartridge port. Drives
  36. C-P and d-p are all vectored through another set of vectors, referred
  37. to as the hard disk vectors. In reality, they can be any type of
  38. storage media. It need only add itself to the vector, and support the
  39. proper functions.
  40.  
  41. Note that support of 'A', 'a', 'B', and 'b' do not constitute four drives,
  42. only two. Drive 'C' is the only one with a case differentation. This
  43. differentation is really only effective on the desktop. Most shells
  44. normalize the case of drives and paths before calling the operating
  45. system.
  46.  
  47. Consequentally, if you were able to designate a drive 'b' or 'B' on
  48. your hard disk, you would be unable to access it. All calls to the drive
  49. would go to the floppy disk vectors. If you had only one floppy drive,
  50. you would get the "Insert disk B into drive A" prompts.
  51.  
  52. --
  53. *George R. Woodside - Citicorp/TTI - Santa Monica, CA
  54. *Path:       ..!philabs|csun|psivax!ttidca!woodside
  55.  
  56. ------------------------------
  57.  
  58. Date: 12 Sep 89 18:42:47 GMT
  59. From: ucrmath!wardlaw@ucsd.edu  (Johnie Wardlaw)
  60. Subject: TOS 1.4 on disk
  61. To: info-atari16@score.stanford.edu
  62.  
  63. Now that TOS 1.4 (aka Rainbow TOS) is available, does this mean that the disk
  64. based beta version supplied to registered developers is "up for grabs"?  I
  65. would like to see how the new version affects my environment before committing
  66. myself to the new ROM set.  I know the question "Is it worth it?" has been
  67. asked and answered but I would feel much better justifying the $100.00 upgrade
  68. cost to my wife if I can SHOW her what it will fix/affect on our machine.
  69.  
  70. People are also complaining that they can't get the ROMs from their dealers
  71. for a number of reasons.  Wouldn't it be a good idea to release a disk based
  72. version here on USENET and/or one of the pay services for those that are
  73. sceptical (like me) or those that can't get the ROMs from the dealers?
  74.  
  75. Just a thought.  I've been reading this newsgroup for years and I finally had
  76. something to say.
  77.  
  78. -- Johnie Wardlaw
  79.  
  80. |INTERNET| wardlaw@ucrmath.ucr.edu |
  81. |  UUCP  | ...ucsd!ucrmath!wardlaw |   "If that was foreplay, I'm a dead man!"
  82. |==SLOW==| 3971 Witt Avenue        |
  83. |==MAIL==| Riverside, CA  92501    |           Alien Sex Scene - Cocoon
  84. | PHONE  | (714) 682-9859          |
  85.  
  86. ------------------------------
  87.  
  88. Date: 12 Sep 89 15:57:32 GMT
  89. From: rochester!rit!ultb!clf3678@louie.udel.edu  (C.L. Freemesser)
  90. Subject: Modems and interfaces
  91. To: info-atari16@score.stanford.edu
  92.  
  93. Hello all!
  94.  
  95. I've received both some orders and some questions about the stuff for
  96. sale.  Let me clarify this here, because the mail facilities here at RIT
  97. ROT IN HELL, and I can't send out e-mail properly.
  98.  
  99. To reiterate:  The 850 interfaces are $45, modems are $40, $5 shipping
  100. per item.
  101.  
  102. If you would like to order one or both of these items, do the following:
  103.  
  104. 1) Write out a small note telling me what you would like to order,
  105.    where I should send it, and where you saw the ad for the stuff, to:
  106.  
  107.    Chris Freemesser
  108.    223 Renouf Drive
  109.    Rochester, NY 14624
  110.  
  111.    My phone number is (716)328-1703, so you can call me if you wish to,
  112.    or you can call my BBS (number in signature).  Also, if you have
  113.    access, leave me a note on Bitnet or GEnie *INSTEAD* of E-mail here.
  114.    I have no problems replying on these networks, only on UseNet.
  115.  
  116.    I will send out the stuff when I receive payment (check or money
  117.    order).
  118.  
  119. 2) To those who have already sent payment:  There will be a short delay
  120.    in receiving the interfaces.  The shipment of power supplies for them
  121.    has been delayed by about 10 days.  DO NOT FEAR!  I will send these
  122.    items out ASAP.  I have the modems, so they get sent out immediately.
  123.  
  124.  
  125. Chris Freemesser, Rochester Institute of Technology | What I like :
  126. BITNET: %clf3678@RITVAX   GEnie: C.FREEMESSER       | 1) My Atari ST
  127. USENET: Just reply and hope it gets through         | 2) My '77 Mercury
  128. Call the ACORN BBS (716)436-3078, 300/1200 baud     | 3) Coke Classic
  129.  
  130. ------------------------------
  131.  
  132. Date: 12 Sep 89 17:52:30 GMT
  133. From: hall!rosenkra@UMN-CS.CS.UMN.EDU  (Bill Rosenkranz)
  134. Subject: Re: ROM disassembly for TOS -- A suggestion.
  135. To: info-atari16@score.stanford.edu
  136.  
  137. In article <1640@ns.network.com> logajan@ns.network.com (John Logajan) writes:
  138. =
  139. =ERGO, all you do is sell a customized disassebler which has tables of
  140. =mnemonic labels and comments -- what all -- and your customer has to run
  141. =it on his machine to generate his own listings.
  142.  
  143. though john's suggestion is (probably) legal (i think i've seen these sorts
  144. of programs for the PC), the general idea is for atari to freely distribute
  145. the code to either 1) developers for a small fee, 2) all for a small fee.
  146. what is the big problem? everyone with an ST HAS the code on very accessible
  147. ROMs.
  148.  
  149. -bill
  150. rosenkra@boston.cray.com
  151.  
  152. ------------------------------
  153.  
  154. Date: 12 Sep 89 17:42:32 GMT
  155. From: hall!rosenkra@UMN-CS.CS.UMN.EDU  (Bill Rosenkranz)
  156. Subject: put pixel routine wanted
  157. To: info-atari16@score.stanford.edu
  158.  
  159. ---
  160. someone wanted some non-GEM put pixel routine. here are some line-A calls
  161. for C (written for alcyon/madmac, should work with sozobon)...
  162.  
  163. i wrote these a long time ago but they should be ok and be pretty fast.
  164. if u really need speed, write in asm and inline these calls...
  165.  
  166. -bill
  167. rosenkra@boston.cray.com
  168.  
  169. #! /bin/sh
  170. : This is a shar archive.  Extract with sh, not csh.
  171. echo x - Readme
  172. cat > Readme << '19165!Funky!Stuff!'
  173. the linea functions here are callable from c. so far the basic ones are
  174. written (init, get/put pixel, line, blit).
  175.  
  176. the test programs exercise the functions as follows:
  177.  
  178.     tst1.ttp    put random pixels (linea1) and lines (linea3)
  179.     tst2.ttp    bit blit an image around the screen
  180.  
  181. they seem to work fine but i don't yet know all the side effects (i.e. which
  182. regs get clobbered). tst2 never does an init (linea0).
  183.  
  184. the linea0 function could be expanded to pass all the pointers back thru
  185. args. right now it just returns ptr to the linea structure. the init also
  186. gives a ptr to the font header list as well as ptrs to the actual linea
  187. functions though to use them directly, you must be in supervisor mode.
  188.  
  189. the line drawing demo is very fast.
  190.  
  191. so far, there is no need to be in supervisor mode to do these things.
  192.  
  193. the file "linea.h" is not needed. it does, however, present a list of all
  194. the things in the line A structure in memory.
  195. 19165!Funky!Stuff!
  196. echo x - Makefile
  197. cat > Makefile << '19165!Funky!Stuff!'
  198. CFLAGS    = -new
  199.  
  200. T1_OBJS    = tst1.o linea0.o linea1.o linea3.o
  201. T2_OBJS    = tst2.o linea7.o
  202.  
  203. all:        tst1 tst2
  204. tst1:        tst1.ttp
  205. tst2:        tst2.ttp
  206.  
  207. tst1.ttp:    $(T1_OBJS)
  208.         $(CC) -new -s -o tst1.ttp $(T1_OBJS)
  209.         @echo tst1.ttp (point and line tests) made
  210.         @echo execute with:   tst1 500
  211.  
  212.  
  213. tst2.ttp:    $(T2_OBJS)
  214.         $(CC) -new -s -o tst2.ttp $(T2_OBJS)
  215.         @echo tst2.ttp (bit blit test) made
  216.         @echo execute with:   tst2
  217.  
  218. tst1.o:        tst1.c
  219. tst2.o:        tst2.c
  220. linea0.o:    linea0.s
  221. linea1.o:    linea1.s
  222. linea3.o:    linea3.s
  223. linea7.o:    linea7.s
  224.  
  225. 19165!Funky!Stuff!
  226. echo x - linea0.s
  227. cat > linea0.s << '19165!Funky!Stuff!'
  228. *
  229. *    linea0 - return long pointer to struct
  230. *
  231. *    synopsis:
  232. *
  233. *    ptr = (struct line_a *) linea0 ();
  234. *
  235.  
  236. Init=$A000
  237.  
  238.     .globl    _linea0
  239.  
  240.     .text
  241.  
  242. _linea0:
  243.     link    a6,#0            * stack frame
  244.     movem.l    a0-a2,-(a7)        * save regs we clobber (except d0)
  245.  
  246.     dc.w    Init
  247.  
  248. * pointer to struct now in d0 and a0. a1 -> array of font headers, a2 -> array
  249. * of linea functions
  250.  
  251.     movem.l    (a7)+,a0-a2        * restore regs
  252.     unlk    a6            * fix stack frame
  253.  
  254.     rts                * d0 is pointer
  255.  
  256.     .end
  257.  
  258. 19165!Funky!Stuff!
  259. echo x - linea1.s
  260. cat > linea1.s << '19165!Funky!Stuff!'
  261. *
  262. *    linea1 - put pixel
  263. *
  264. *    synopsis:
  265. *
  266. *    void linea1 (struct line_a *ptr, x, y, color);
  267. *
  268.  
  269. * linea struct offsets:
  270.  
  271. INTIN=8
  272. PTSIN=12
  273.  
  274. * args: (wrt stack frame ptr a6)
  275.  
  276. ptr=8
  277. x=12
  278. y=14
  279. color=16
  280.  
  281.  
  282.     .globl    _linea1
  283.  
  284.     .text
  285.  
  286. _linea1:
  287.     link    a6,#0
  288. *    movem.l    a0,-(a7)
  289.  
  290.     move.l    ptr(a6),a0        * linea struct ptr
  291.     move.l    INTIN(a0),a1
  292.     move.l    PTSIN(a0),a2
  293.     move.w    color(a6),(a1)        * put color in intin table
  294.     move.l    x(a6),(a2)        * put coord in ptsin table
  295.  
  296.     dc.w    $A001            * draw pixel
  297.  
  298. *    movem.l    (a7)+,a0
  299.     unlk    a6
  300.  
  301.     rts
  302.  
  303.  
  304.     .end
  305.  
  306. 19165!Funky!Stuff!
  307. echo x - linea2.s
  308. cat > linea2.s << '19165!Funky!Stuff!'
  309. *
  310. *    linea2 - get pixel
  311. *
  312. *    synopsis:
  313. *
  314. *    int linea1 (struct line_a *ptr, x, y);
  315. *
  316.  
  317. * linea struct offsets:
  318.  
  319. PTSIN=12
  320.  
  321. * args: (wrt stack frame ptr a6)
  322.  
  323. ptr=8
  324. x=12
  325. y=14
  326.  
  327.  
  328.     .globl    _linea2
  329.  
  330.     .text
  331.  
  332. _linea2:
  333.     link    a6,#0
  334.     movem.l    a0-a1,-(a7)
  335.  
  336.     move.l    ptr(a6),a0        * linea struct ptr
  337.     move.l    PTSIN(a0),a1
  338.     move.l    x(a6),(a1)        * put coord in ptsin table
  339.  
  340.     dc.w    $A002            * get pixel. returns d0.w
  341.  
  342.     movem.l    (a7)+,a0-a1
  343.     unlk    a6
  344.  
  345.     rts
  346.  
  347.  
  348.     .end
  349.  
  350. 19165!Funky!Stuff!
  351. echo x - linea3.s
  352. cat > linea3.s << '19165!Funky!Stuff!'
  353. *
  354. *    linea3 - draw line
  355. *
  356. *    synopsis:
  357. *
  358. *    void linea3 (struct line_a *ptr, x1, y1, x2, y2, mode, mask, opt);
  359. *
  360. *    uses line A to draw a line from x1,y1 to x2,y2.
  361. *
  362.  
  363. * linea struct offsets:
  364.  
  365. CBIT0=24
  366. CBIT1=26
  367. CBIT2=28
  368. CBIT3=30
  369. LSTLIN=32
  370. LNMASK=34
  371. WMODE=36
  372. X1=38
  373. Y1=40
  374. X2=42
  375. Y2=44
  376.  
  377.  
  378. * args:  (wrt stack frame ptr a6)
  379.  
  380. ptr=8
  381. x_1=12
  382. y_1=14
  383. x_2=16
  384. y_2=18
  385. mode=20
  386. mask=22
  387. opt=24
  388.  
  389.     .globl    _linea3
  390.  
  391.     .text
  392.  
  393. _linea3:
  394.     link    a6,#0
  395.  
  396.     move.l    ptr(a6),a0        * line A init (a0 -> structure)
  397.  
  398.     move.w    #1,CBIT0(a0)        * plane 0 (all)
  399.     move.w    #1,CBIT1(a0)        * plane 1 (color only)
  400.     move.w    #1,CBIT2(a0)        * plane 2 (lo res only)
  401.     move.w    #1,CBIT3(a0)        * plane 3 (lo res only)
  402.     move.w    opt(a6),LSTLIN(a0)    * draw last pixel of line?
  403.     move.w    mask(a6),LNMASK(a0)    * line mask (solid=FFFF)
  404.     move.w    mode(a6),WMODE(a0)    * write mode (replace=0)
  405.     move.l    x_1(a6),X1(a0)        * coord of points
  406.     move.l    x_2(a6),X2(a0)
  407.  
  408.     dc.w    $A003            * draw line
  409.  
  410.     unlk    a6
  411.  
  412.     rts
  413.  
  414.     .end
  415.  
  416. 19165!Funky!Stuff!
  417. echo x - linea7.s
  418. cat > linea7.s << '19165!Funky!Stuff!'
  419. *
  420. *    linea7 - bit blit
  421. *
  422. *    synopsis:
  423. *
  424. *    void linea7 (long blit_parm_block);
  425. *
  426.  
  427. pblock=8
  428.  
  429.  
  430.     .globl    _linea7
  431.  
  432.     .text
  433.  
  434. _linea7:
  435.     link    a5,#0            * set up a stack frame with a5
  436.     movem.l    a6,-(a7)        * save a6 since it is used
  437.  
  438.     move.l    pblock(a5),a6        * copy arg to a6 (-> blit parm block)
  439.  
  440.     dc.w    $A007            * do it...
  441.  
  442.     movem.l    (a7)+,a6        * restore a6
  443.     unlk    a5
  444.  
  445.     rts                * returns nothing
  446.  
  447.     .end
  448. 19165!Funky!Stuff!
  449. echo x - tst1.c
  450. cat > tst1.c << '19165!Funky!Stuff!'
  451. /*#define DEBUG*/
  452.  
  453. #ifdef DEBUG
  454. #include <stdio.h>
  455. #endif
  456. #include <osbind.h>
  457.  
  458. #ifndef void
  459. #define void    int
  460. #endif
  461.  
  462. long    linea0 ();
  463. void    linea1 ();
  464. long    atol ();
  465. int    rand ();
  466. int    rand_range ();
  467. long    lrand_range ();
  468. long    lrand ();
  469.  
  470.  
  471. main(argc, argv)
  472. int    argc;
  473. char   *argv[];
  474.     long    ii;
  475.     int    x1, y1, x2, y2;
  476.     int    x, y;
  477.     int    mode = 2;        /* 0=replace,2=XOR */
  478.     int    opt = 0;
  479.     int    mask = 0xFFFF;
  480.     int    color = 1;
  481.     long    ptr;
  482.     long    num = 1000L;
  483.  
  484.     argc--, argv++;
  485.     if (argc > 0)
  486.         num = atol (*argv);
  487.  
  488.     ptr = linea0 ();
  489.  
  490. #ifdef DEBUG
  491.     fprintf (stderr, "linea0 ptr: 0x%08lx\n\n\n", ptr);
  492.     fprintf (stderr, "planes:     %d\n", *(int *)(ptr));
  493.     fprintf (stderr, "v_rez_vt:   %d\n", *(int *)(ptr-4));
  494.     fprintf (stderr, "v_rez_hz:   %d\n", *(int *)(ptr-12));
  495. #endif
  496.     Cconws ("any key to start pixel test (linea1):\n\r");
  497.     Cconin ();
  498.     Cconws ("\33E");
  499.  
  500.     for (ii = 0; ii < num; ii++)
  501.     
  502.         x = rand_range (100, 500);
  503.         y = rand_range (100, 300);
  504.  
  505.         linea1 (ptr, x, y, color);
  506.     
  507.  
  508.     Cconws ("pixel test done...any key to start line test (linea3):\n\r");
  509.     Cconin ();
  510.     Cconws ("\33E");
  511.  
  512.     for (ii = 0; ii < num; ii++)
  513.     
  514.         x1 = rand_range (100, 500);
  515.         x2 = rand_range (100, 500);
  516.         y1 = rand_range (100, 300);
  517.         y2 = rand_range (100, 300);
  518.  
  519.         linea3 (ptr, x1, y1, x2, y2, mode, mask, opt);
  520.     
  521.  
  522.     exit (0);
  523.  
  524.  
  525. /*------------------------------*/
  526. /*    rand_range        */
  527. /*------------------------------*/
  528. int    rand_range (lo, hi)
  529. int    lo, hi;
  530.  
  531. /*
  532.  *    return random int in the range specified (0-7fff): lo <= val < hi
  533.  */
  534.  
  535.     return (((int) rand () % (hi - lo)) + lo);
  536.  
  537.  
  538. /*------------------------------*/
  539. /*    lrand_range        */
  540. /*------------------------------*/
  541. long    lrand_range (lo, hi)
  542. long    lo, hi;
  543.  
  544. /*
  545.  *    return random long in the range specified (0-7fffffff): lo <= val < hi
  546.  *
  547.  *    note: alcyon may have a problem with % for longs...
  548.  */
  549.  
  550.     extern long    lrand ();
  551.  
  552.     return (((long) lrand () % (hi - lo)) + lo);
  553.  
  554.  
  555.  
  556. /*------------------------------*/
  557. /*    lrand            */
  558. /*------------------------------*/
  559. long    lrand ()
  560.  
  561. /*
  562.  *    return random long.
  563.  *
  564.  *    fills each word with a random int. also could interleave the ints.
  565.  */
  566.  
  567.     union
  568.     
  569.         long    lval;
  570.         int    ival[2];
  571.  
  572.         uuu;
  573.  
  574.     uuu.ival[0] = rand ();
  575.     uuu.ival[1] = rand ();
  576.  
  577.     return ((long) uuu.lval);
  578. 19165!Funky!Stuff!
  579. echo x - tst2.c
  580. cat > tst2.c << '19165!Funky!Stuff!'
  581. /*
  582.  *    demo the linea bit blit ($A007)
  583.  */
  584.  
  585. #include <portab.h>
  586. #include <osbind.h>
  587. #include <gem\blit.h>
  588.  
  589. extern void    linea7 ();
  590. extern long    atol ();
  591.  
  592. long        tfac;                /* for speed control */
  593.  
  594. BBPB        pblock;                /* for transfer to screen */
  595. BBPB        pblock2;            /* for transfer from screen */
  596.  
  597. int        save_space[60];            /* place to save screen rect*/
  598. int        bug[60] =            /* our thingie to blit... */
  599.         0x0000,0x0000,0x0030,
  600.         0x0000,0x0000,0x0066,
  601.         0x0000,0x0000,0x006c,
  602.         0x0000,0x0000,0x00ce,
  603.         0x0000,0x0000,0x00cc,
  604.         0x0000,0x0000,0x0198,
  605.         0x0000,0x0000,0x03b0,
  606.         0x0000,0x0000,0x0770,
  607.         0x0000,0x0000,0x0760,
  608.         0x0000,0x0000,0x0ee0,
  609.         0x0000,0x0000,0x7fc0,
  610.         0x0000,0x0003,0xffc0,
  611.         0x0000,0x003f,0xffc0,
  612.         0x0000,0x00ff,0xffe0,
  613.         0x0000,0x1fff,0xfff0,
  614.         0x01ff,0xffff,0xfef0,
  615.         0x0fff,0xffff,0xff70,
  616.         0x1fff,0xffff,0xff80,
  617.         0xffff,0xffff,0xffe0,
  618.         0xffff,0xffff,0xffc0
  619. ;
  620. int        unbug[60] =            /* not really needed... */
  621.         0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0,
  622.         0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0,
  623.         0,0,0, 0,0,0, 0,0,0, 0,0,0
  624. ;
  625.  
  626. main (argc, argv)
  627. int    argc;
  628. char   *argv[];
  629.     register int    x,
  630.             y;
  631.     register int    xdirection,
  632.             ydirection;
  633.     register int    inc;
  634.     int        i;
  635.     int        xmin,
  636.             xmax,
  637.             ymin,
  638.             ymax;
  639.     long        screen;
  640.     long        old_phys;
  641.     long        old_log;
  642.  
  643.  
  644.     /*
  645.      *   check arg...(time delay)
  646.      */
  647.     argc--, argv++;
  648.     tfac = 1000L;
  649.     if (argc > 0)
  650.         tfac = atol (*argv);
  651.  
  652.  
  653.     /*
  654.      *   erase screen
  655.      */
  656. /*    Cconws ("\33E");*/
  657.     Cconws ("up/down arrow controls speed. any other key quits...any key to start:
  658.  \n\r");
  659.     Cconin ();
  660.  
  661.     /*
  662.      *   get old phys/logbase and reset screen
  663.      */
  664.     old_phys = Physbase ();
  665.     old_log  = Logbase ();
  666.     screen   = old_phys;
  667. /*    Setscreen (screen, screen, -1);*/
  668.  
  669.  
  670.     /*
  671.      *   fill in blit param blocks. first one is used for sprite->screen
  672.      *   second one used for screen->buf. the op_tab stuff is critical.
  673.      */
  674.     pblock.bb_b_wd         = 48;        /* pixels/line */
  675.     pblock.bb_b_ht         = 20;        /* lines */
  676.     pblock.bb_plane_ct    = 1;        /* num conseq planes to blit */
  677.     pblock.bb_fg_col    = 1;
  678. /*!!!*/    pblock.bb_bg_col    = 0;        /* was 0 */
  679.     pblock.bb_op_tab.fg0bg0    = 4;        /* replace */
  680.     pblock.bb_op_tab.fg0bg1    = 4;
  681.     pblock.bb_op_tab.fg1bg0    = 7;
  682.     pblock.bb_op_tab.fg1bg1    = 7;
  683.  
  684.     pblock.bb_s.bl_xmin    = 0;        /* src always 0,0 */
  685.     pblock.bb_s.bl_ymin    = 0;
  686.     pblock.bb_s.bl_form    = (char *) bug;
  687.     pblock.bb_s.bl_nxwd    = HI_NXWD;
  688.     pblock.bb_s.bl_nxln    = 6;        /* byte offset (48/8) */
  689.     pblock.bb_s.bl_nxpl    = NXPL;        /* always 2 */
  690.  
  691.     pblock.bb_d.bl_xmin    = 0x00FF;    /* initial dest x,y */
  692.     pblock.bb_d.bl_ymin    = 0x0064;
  693.     pblock.bb_d.bl_form    = (char *) screen;
  694.     pblock.bb_d.bl_nxwd    = HI_NXWD;
  695.     pblock.bb_d.bl_nxln    = HI_NXLN;    /* 80*8 pix/lines */
  696.     pblock.bb_d.bl_nxpl    = NXPL;        /* always 2 */
  697.  
  698.     pblock.bb_p_addr    = 0L;        /* no "pattern"... */
  699.     pblock.bb_p_nxln    = 0;
  700.     pblock.bb_p_nxpl    = 0;
  701.     pblock.bb_p_mask    = 0;
  702.     for (i = 0; i < 24; i++)
  703.         pblock.bb_fill[i] = 0;
  704.  
  705.     pblock2.bb_b_wd     = pblock.bb_b_wd;
  706.     pblock2.bb_b_ht     = pblock.bb_b_ht;
  707.     pblock2.bb_plane_ct    = 1;
  708.     pblock2.bb_fg_col    = 1;
  709.     pblock2.bb_bg_col    = 0;
  710.     pblock2.bb_op_tab.fg0bg0= 3;
  711.     pblock2.bb_op_tab.fg0bg1= 3;
  712.     pblock2.bb_op_tab.fg1bg0= 3;
  713.     pblock2.bb_op_tab.fg1bg1= 3;
  714.  
  715.     pblock2.bb_s.bl_xmin    = pblock.bb_d.bl_xmin;
  716.     pblock2.bb_s.bl_ymin    = pblock.bb_d.bl_ymin;
  717.     pblock2.bb_s.bl_form    = pblock.bb_d.bl_form;
  718.     pblock2.bb_s.bl_nxwd    = pblock.bb_d.bl_nxwd;
  719.     pblock2.bb_s.bl_nxln    = pblock.bb_d.bl_nxln;
  720.     pblock2.bb_s.bl_nxpl    = pblock.bb_d.bl_nxpl;
  721.  
  722.     pblock2.bb_d.bl_xmin    = pblock.bb_s.bl_xmin;
  723.     pblock2.bb_d.bl_ymin    = pblock.bb_s.bl_ymin;
  724.     pblock2.bb_d.bl_form    = pblock.bb_s.bl_form;
  725.     pblock2.bb_d.bl_nxwd    = pblock.bb_s.bl_nxwd;
  726.     pblock2.bb_d.bl_nxln    = pblock.bb_s.bl_nxln;
  727.     pblock2.bb_d.bl_nxpl    = pblock.bb_s.bl_nxpl;
  728.  
  729.     pblock2.bb_p_addr    = 0L;
  730.     pblock2.bb_p_nxln    = 0;
  731.     pblock2.bb_p_nxpl    = 0;
  732.     pblock2.bb_p_mask    = 0;
  733.     for (i = 0; i < 24; i++)
  734.         pblock2.bb_fill[i] = 0;
  735.  
  736.     /*
  737.      *   for direction changes...
  738.      */
  739.     xdirection = -1;
  740.     ydirection = -1;
  741.     xmin = 0;                /* limits */
  742.     xmax = 640-48;
  743.     ymin = 0;
  744.     ymax = 400-14;
  745.     inc = 2;                /* movement each cycle (pix)*/
  746.  
  747.     /*
  748.      *   do it until a non-arrow key is pressed
  749.      */
  750.     while (1)
  751.     
  752.         /*
  753.          *   save old background. use block 2
  754.          */
  755.         pblock2.bb_s.bl_form = (char *) screen;
  756.         pblock2.bb_d.bl_form = (char *) save_space;
  757.         linea7 (&pblock2);
  758.  
  759.         /*
  760.          *   draw block (vsync is bad...)
  761.          */
  762.         pblock.bb_op_tab.fg0bg0    = 4;        /* !s & d */
  763.         pblock.bb_op_tab.fg0bg1    = 4;
  764.         pblock.bb_op_tab.fg1bg0    = 7;        /* s | d */
  765.         pblock.bb_op_tab.fg1bg1    = 7;
  766.         pblock.bb_d.bl_form = (char *) screen;
  767.         pblock.bb_s.bl_form = (char *) bug;
  768.         linea7 (&pblock);
  769.  
  770.  
  771.         /*
  772.          *   delay controls speed
  773.          */
  774.         time_delay (tfac);
  775.  
  776.  
  777.         /*
  778.          *   calc new position during the delay
  779.          */
  780.         x = pblock.bb_d.bl_xmin + (xdirection * inc);
  781.         if (x < xmin)
  782.         
  783.             x = xmin + inc;
  784.             xdirection *= -1;
  785.         
  786.         if (x > xmax)
  787.         
  788.             x = xmax - inc;
  789.             xdirection *= -1;
  790.         
  791.         y = pblock.bb_d.bl_ymin + (ydirection * inc);
  792.         if (y < ymin)
  793.         
  794.             y = ymin + inc;
  795.             ydirection *= -1;
  796.         
  797.         if (y > ymax)
  798.         
  799.             y = ymax - inc;
  800.             ydirection *= -1;
  801.         
  802.  
  803.  
  804.         /*
  805.          *   get user key input. right now just track up/down
  806.          *   arrows for speed control. any other char quits.
  807.          */
  808.         if (user_break ())
  809.             break;
  810.  
  811.  
  812.         /*
  813.          *   now undraw (could actually blit old background back)
  814.          */
  815.         pblock.bb_op_tab.fg0bg0    = 3;        /* replace */
  816.         pblock.bb_op_tab.fg0bg1    = 3;
  817.         pblock.bb_op_tab.fg1bg0    = 3;
  818.         pblock.bb_op_tab.fg1bg1    = 3;
  819. /*        pblock.bb_s.bl_form = (char *) unbug;*/
  820.         pblock.bb_s.bl_form = (char *) save_space;
  821.         pblock.bb_d.bl_form = (char *) screen;
  822.         linea7 (&pblock);
  823. /*        Vsync ();*/
  824.         /* vsync here makes it smoother, but it is much slower */
  825.  
  826.  
  827.         /*
  828.          *   set new coords
  829.          */
  830.         pblock.bb_d.bl_xmin  = x;
  831.         pblock2.bb_s.bl_xmin = x;
  832.         pblock.bb_d.bl_ymin  = y;
  833.         pblock2.bb_s.bl_ymin = y;
  834.     
  835.  
  836.     /*
  837.      *   reset screen
  838.      */
  839. /*    Setscreen (old_log, old_phys, -1);*/
  840.  
  841.     exit (0);
  842.  
  843.  
  844.  
  845. time_delay (n)
  846. long    n;
  847.     long    i;
  848.  
  849.     for (i = 0; i < n; i++)
  850.         ;
  851.  
  852.  
  853.  
  854. int    user_break ()
  855.     long    inkey;
  856.  
  857.     if (Bconstat (2))
  858.     
  859.         /*
  860.          *   ret 2 bytes in low byte of each word (not like
  861.          *   evnt_keybd)
  862.          */
  863.         inkey = Bconin (2);
  864.         if (inkey == 0x00480000L)    /* up arrow -> faster */
  865.             tfac -= 55;
  866.         else if (inkey == 0x00500000L)    /* down arrow -> slower */
  867.             tfac += 55;
  868.         else
  869.             return (1);
  870.     
  871.     return (0);
  872. 19165!Funky!Stuff!
  873.  
  874. ------------------------------
  875.  
  876. End of Info-Atari16 Digest
  877. **************************
  878. -------
  879.  
  880. ə